package wechat

import (
	"baokaobang/conf"
	"baokaobang/utils"
	"encoding/json"
	"fmt"
)

type MiniLogin struct {
	Appid     string `json:"appid"`      // 小程序appId
	Secret    string `json:"secret"`     // 小程序appSecret
	JsCode    string `json:"js_code"`    // wx.login获取的code
	GrantType string `json:"grant_type"` // 授权类型，此处只需填写authorization_code
}

type MiniLoginRes struct {
	Errcode    int64  `json:"errcode"`     // 错误码
	Errmsg     string `json:"errmsg"`      // 错误信息
	Openid     string `json:"openid"`      // 用户唯一标识
	SessionKey string `json:"session_key"` // 会话密钥
	Unionid    string `json:"unionid"`     // 用户在开放平台的唯一标识符，在满足 UnionID 下发条件的情况下会返回
}

func NewMiniLogin(code string) *MiniLogin {
	return &MiniLogin{
		Appid:     conf.MiniConfig.AppId,
		Secret:    conf.MiniConfig.AppSecret,
		JsCode:    code,
		GrantType: "authorization_code",
	}
}

func (m *MiniLogin) Login() (*MiniLoginRes, error) {
	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=%s",
		m.Appid, m.Secret, m.JsCode, m.GrantType)
	res, err := utils.GetRequest(url)
	if err != nil {
		return nil, err
	}
	miniLoginRes := MiniLoginRes{}
	err = json.Unmarshal(res, &miniLoginRes)
	if err != nil {
		return nil, err
	}
	return &miniLoginRes, nil
}
